/**
 * 统一错误处理中间件
 */
const errorHandler = (err, req, res, next) => {
  console.error('错误:', err);
  
  // 默认错误状态码和消息
  let statusCode = 500;
  let message = '服务器内部错误';
  
  // 处理不同类型的错误
  if (err.name === 'ValidationError') {
    // Joi或Sequelize验证错误
    statusCode = 400;
    message = err.message;
  } else if (err.name === 'UnauthorizedError' || err.message === '无效的令牌') {
    // JWT验证错误
    statusCode = 401;
    message = '未授权，请重新登录';
  } else if (err.name === 'ForbiddenError') {
    // 权限错误
    statusCode = 403;
    message = '没有权限执行此操作';
  } else if (err.name === 'NotFoundError') {
    // 资源未找到
    statusCode = 404;
    message = '请求的资源不存在';
  }
  
  // 在开发环境中显示更多错误信息
  const error = process.env.NODE_ENV === 'development'
    ? { message, stack: err.stack }
    : { message };
  
  res.status(statusCode).json({
    code: statusCode,
    message: message,
    error: error
  });
};

module.exports = {
  errorHandler
};
